#include<iostream>
#include<unistd.h>
#include<pthread.h>
#include<string.h>


//测试线程的创建与回收

// std::string ToHex(int tid)//将tid转换为十六进制
// {
//     char str[64];
//     snprintf(str,sizeof(str),"0x%x",tid);
//     return str;
// }

// int g_val=10;

// void* pthread_run(void* args)
// {
//     while(g_val--)
//     {
//         std::cout<<"I'm sub pthread,my tid: "<<ToHex(pthread_self())<<", my pid"<<getpid()<<std::endl;
//         sleep(1);
//     }
//     //退出方法
//     pthread_exit((void*)789);
//     //exit(0); //不行,终止进程
//     //return (void*)123; //可以
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,pthread_run,(void*)"sub pthread");//得到的tid是OS用来标识线程的。

//     sleep(2);
//     pthread_cancel(tid);//向线程发送取消请求
//     //while(g_val)
//     // {
//     //     sleep(1);
//     //     std::cout<<"I'm main pthread,my tid: "<<ToHex(pthread_self())<<", my pid"<<getpid()<<std::endl;
//     // }
//     std::cout<<"tid: "<<ToHex(pthread_self())<<std::endl;
//     void* ret=nullptr;
//     pthread_join(tid,&ret);
//     std::cout<<"subpthread 退出码： "<<(long long)ret<<std::endl;//void* 8字节，long long 8字节

//     return 0;
// }


// //启动线程测试代码
// int g_val=10;//共享资源

// void* pthread_run(void* args)
// {
//     while(g_val--)
//     {
//         sleep(1);
//         std::cout<<"I'm sub pthread,g_val"<<g_val<<", my pid"<<getpid()<<std::endl;
//     }
//     return nullptr;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,pthread_run,nullptr);//创建线程，tid输出型，nullptr是线程属性，pthread_run是线程执行的函数，nullptr是函数传入参数
//     while(g_val)
//     {
//         sleep(1);
//         std::cout<<"I'm main pthread,g_val"<<g_val<<", my pid"<<getpid()<<std::endl;
//     }
//     std::cout<<"tid: "<<tid<<std::endl;
//     return 0;
// }